home *** CD-ROM | disk | FTP | other *** search
-
-
-
- aaaauuuuttttoooouuuusssseeee((((3333)))) aaaauuuuttttoooouuuusssseeee((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- autouse - postpone load of modules until a function is used
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use autouse 'Carp' => qw(carp croak);
- carp "this carp was predeclared and autoused ";
-
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- If the module Module is already loaded, then the declaration
-
- use autouse 'Module' => qw(func1 func2($;$) Module::func3);
-
- is equivalent to
-
- use Module qw(func1 func2);
-
- if Module defines _f_u_n_c_2() with prototype ($;$), and _f_u_n_c_1() and _f_u_n_c_3()
- have no prototypes. (At least if Module uses Exporter's import,
- otherwise it is a fatal error.)
-
- If the module Module is not loaded yet, then the above declaration
- declares functions _f_u_n_c_1() and _f_u_n_c_2() in the current package, and
- declares a function _M_o_d_u_l_e::_f_u_n_c_3(). When these functions are called,
- they load the package Module if needed, and substitute themselves with
- the correct definitions.
-
- WWWWAAAARRRRNNNNIIIINNNNGGGG
- Using autouse will move important steps of your program's execution from
- compile time to runtime. This can
-
- +o Break the execution of your program if the module you autoused has
- some initialization which it expects to be done early.
-
- +o hide bugs in your code since important checks (like correctness of
- prototypes) is moved from compile time to runtime. In particular,
- if the prototype you specified on autouse line is wrong, you will
- not find it out until the corresponding function is executed. This
- will be very unfortunate for functions which are not always called
- (note that for such functions autouseing gives biggest win, for a
- workaround see below).
-
- To alleviate the second problem (partially) it is advised to write your
- scripts like this:
-
- use Module;
- use autouse Module => qw(carp($) croak(&$));
- carp "this carp was predeclared and autoused ";
-
- The first line ensures that the errors in your argument specification are
- found early. When you ship your application you should comment out the
- first line, since it makes the second one useless.
-
-
-
- PPPPaaaaggggeeee 1111
-
-
-
-
-
-
- aaaauuuuttttoooouuuusssseeee((((3333)))) aaaauuuuttttoooouuuusssseeee((((3333))))
-
-
-
- BBBBUUUUGGGGSSSS
- If _M_o_d_u_l_e::_f_u_n_c_3() is autoused, and the module is loaded between the
- autouse directive and a call to _M_o_d_u_l_e::_f_u_n_c_3(), warnings about
- redefinition would appear if warnings are enabled.
-
- If _M_o_d_u_l_e::_f_u_n_c_3() is autoused, warnings are disabled when loading the
- module via autoused functions.
-
- AAAAUUUUTTTTHHHHOOOORRRR
- Ilya Zakharevich (ilya@math.ohio-state.edu)
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- _p_e_r_l(1).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PPPPaaaaggggeeee 2222
-
-
-
-